package futbol.tacticas.concursantes2007.kapsi;

import java.awt.Point;
import java.awt.Rectangle;
import java.util.Vector;

import futbol.General;

public class Area {
	
	private Point centro;
	private Point modificador;
	private Point centroModificadoAnterior;
	private int radio;
	private Vector<Integer> jugadores=new Vector();
	private Vector<Integer> contrarios=new Vector();
	private boolean bola = false;
	private int totalContrarios=0;
	
	public Area(int x, int y,int radio){
		this.centro = new Point(x,y);
		this.modificador = new Point(0,0);
		this.centroModificadoAnterior = new Point(x,y);
		this.radio = radio;
	}
	
	public Point getCentro(){
		return this.centro;
	}
	
	public int getCentroX(){
		return this.centro.x;
	}
	
	public int getCentroModificadoX(){
		
		int x =this.centro.x + this.modificador.x;
//		//System.out.println("X: centroModificado anterior " +  this.centroModificadoAnterior + "centro " +this.centro + " " +  x);
//		if( Math.abs(x - this.centroModificadoAnterior.x) <200){
//			this.centroModificadoAnterior.x = x;
			return x;
//		}else{
//			this.centroModificadoAnterior.x = this.centro.x +(int)Math.signum(x)*20;
//			return this.centro.x +(int)Math.signum(x)*20;
//			
//		}
	}
	
	public int getCentroModificadoY(){
		int y =this.centro.y + this.modificador.y; 
////		System.out.println("Y: centroModificado anterior " +  this.centroModificadoAnterior + "centro " +this.centro   + " " + y);
//		if( Math.abs(y - this.centroModificadoAnterior.y) <200){
//			this.centroModificadoAnterior.y = y;
			return y;
//		}else{
//			this.centroModificadoAnterior.y = this.centro.y +(int)Math.signum(y)*20;
//			return this.centro.y + (int)Math.signum(y)*20;
//		}
	}
	
	public int getCentroY(){
		return this.centro.y;
	}
	
	public void addJugador(int j){
		jugadores.add(j);
	}
	public void addContrario(int j){
		contrarios.add(j);
	}
	
	public int diferenciaDeJugadores(){
		return jugadores.size() - contrarios.size();
	}
	
	public void addJugador(int n, Point jug){
		if(this.estaEnZona(jug)){
			this.addJugador(n);
		}
	}
	
	public void addContrario(int n,Point jug){
		if(this.estaEnZona(jug)){
			this.addContrario(n);
			totalContrarios++;
		}
	}
	
	public void addBola(Point bola){
		if(this.estaEnZona(bola)){
			this.bola = true;
		}else{
			this.bola = false;
		}
	}
	
	public boolean estaBola(){
		return this.bola;
	}
	
	public boolean estaEnZona(Point jug){
		return (General.getDistancia(jug.getX(), jug.getY(), centro.getX() + modificador.getX(), centro.getY() + modificador.getY())<this.radio);
	}
	
	
	
	public int getContrarioEnZona(int n){
		return contrarios.get(n).intValue();
	}
	
	public int getNumeroContrarios(){
		return contrarios.size();
	}
	
	public int getJugadoresEnZona(int n){
		return jugadores.get(n).intValue();
	}
	
	public int getNumeroJugadores(){
		return jugadores.size();
	}
	
	public void limpia(){
		this.jugadores.clear();
		this.contrarios.clear();
	}

	public Point getModificador() {
		return modificador;
	}

	public void setModificador(Point modificador) {
		this.modificador = modificador;
	}

	public int getRadio() {
		return radio;
	}
	
	public double getMediaContrarios(int contador){
		return ((double)totalContrarios)/ (double)contador;
	}
	
	public void modificaRadio(double media, int contador){
		if( ((double)totalContrarios)/(double)contador > media && radio>40){
			radio--;
		}else if(radio<60){
			radio++;
		}	
	}
}
